﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ActionTrackerEntities;
using ActionTrackerRules.Base;
using ActionTrackerRules.Helpers;

namespace ActionTrackerRules
{
    public class ProyectoRules : RulesBase
    {
        public Proyecto GetById(int pIdProyecto)
        {
            return GetDaoProvider().GetDaoProyecto().GetById(pIdProyecto);
        }

        public List<Proyecto> GetByFiltro(bool pSoloActivos)
        {
            return GetDaoProvider().GetDaoProyecto().GetByFiltro(pSoloActivos);
        }

        public ResponseEnum Guardar(Proyecto pProyecto)
        {
            try
            {
                if (GetDaoProvider().GetDaoProyecto().ExisteProyectoConNombre(pProyecto.Objetivo, null))
                {
                    return ResponseEnum.EntidadExistente;
                }
                
                //Como mi lista de usuarios va a tener TODOS los usuarios activos, elimino los que no haya chequeado
                //Además tengo que crear un nuevo objeto porque el IEnumerable no es modificable
                List<Usuario> oUsuarios = pProyecto.Usuarios.ToList();
                
                Proyecto oProyectoAGuardar = new Proyecto();
                oProyectoAGuardar.Usuarios = oUsuarios.Where(x => x.Check).ToList();
                oProyectoAGuardar.Objetivo = pProyecto.Objetivo;
                oProyectoAGuardar.FechaCreacion = DateTime.Now;

                GetDaoProvider().GetDaoProyecto().SaveOrUpdate(oProyectoAGuardar);
                return ResponseEnum.Ok;
            }
            catch (Exception)
            {
                return ResponseEnum.Error;
            }
        }

        public ResponseEnum Actualizar(Proyecto pProyecto)
        {
            try
            {
                if (GetDaoProvider().GetDaoProyecto().ExisteProyectoConNombre(pProyecto.Objetivo, pProyecto.IdProyecto))
                {
                    return ResponseEnum.EntidadExistente;
                }
                
                //Como mi lista de usuarios va a tener TODOS los usuarios activos, elimino los que no haya chequeado
                //Además tengo que crear un nuevo objeto porque el IEnumerable no es modificable
                List<Usuario> oUsuarios = pProyecto.Usuarios.ToList();

                Proyecto oProyectoAGuardar = new Proyecto();
                oProyectoAGuardar.IdProyecto = pProyecto.IdProyecto;
                oProyectoAGuardar.Usuarios = oUsuarios.Where(x => x.Check).ToList();
                oProyectoAGuardar.Objetivo = pProyecto.Objetivo;
                oProyectoAGuardar.FechaCreacion = pProyecto.FechaCreacion;
                oProyectoAGuardar.Acciones = pProyecto.Acciones;
                oProyectoAGuardar.Reuniones = pProyecto.Reuniones;

                GetDaoProvider().GetDaoProyecto().SaveOrUpdate(oProyectoAGuardar);
                return ResponseEnum.Ok;
            }
            catch (Exception)
            {
                return ResponseEnum.Error;
            }
        }
    }
}
